package travelDream.bean;

import java.util.LinkedList;
import java.util.List;

import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;

import travelDream.dto.AttivitaDTO;
import travelDream.dto.SoggiornoDTO;
import travelDream.dto.TrasportoDTO;
import travelDream.entities.Escursione;
import travelDream.entities.Hotel;
import travelDream.entities.Volo;
import travelDream.utils.Utils;

/**
 * Session Bean implementation class GestorePersonalizzazioneBean
 */
@Stateless
@LocalBean
public class GestorePersonalizzazioneBean implements GestorePersonalizzazione {

	@PersistenceContext
	EntityManager em;
	
    /**
     * Default constructor. 
     */
    public GestorePersonalizzazioneBean() {
    }
    
    public List<SoggiornoDTO> getSoggiorniCompatibili(String citta) {
    	//Eseguo le query per prendere i dati dalle tabelle
    	TypedQuery<Hotel> q = em.createQuery("SELECT h from Hotel h WHERE h.luogo ='"+citta+"' AND h.in_vendita = TRUE", Hotel.class);
    	
    	//Unisco insieme i risultati e li restituisco
    	List<Hotel> hList = q.getResultList();
    	List<SoggiornoDTO> res = new LinkedList<SoggiornoDTO>();
    	for(Hotel h : hList) {
    		res.add(Utils.convertToDTO(h));
    	}
    	return res;
    }
    
    public List<TrasportoDTO> getAndataCompatibili(String citta) {
    	//Eseguo le query per prendere i dati dalle tabelle
    	TypedQuery<Volo> q = em.createQuery("SELECT v from Volo v WHERE v.destinazione ='"+citta+"' AND v.in_vendita = TRUE", Volo.class);
    	
    	//Unisco insieme i risultati e li restituisco
    	List<Volo> vList = q.getResultList();
    	List<TrasportoDTO> res = new LinkedList<TrasportoDTO>();
    	for(Volo v : vList) {
    		res.add(Utils.convertToDTO(v));
    	}
    	return res;
    }
    
    public List<TrasportoDTO> getRitornoCompatibili(String citta) {
    	//Eseguo le query per prendere i dati dalle tabelle
    	TypedQuery<Volo> q = em.createQuery("SELECT v from Volo v WHERE v.partenza ='"+citta+"' AND v.in_vendita = TRUE", Volo.class);
    	
    	//Unisco insieme i risultati e li restituisco
    	List<Volo> vList = q.getResultList();
    	List<TrasportoDTO> res = new LinkedList<TrasportoDTO>();
    	for(Volo v : vList) {
    		res.add(Utils.convertToDTO(v));
    	}
    	return res;
    }
    
    public List<AttivitaDTO> getAttivitaCompatibili(String citta) {
    	//Eseguo le query per prendere i dati dalle tabelle
    	TypedQuery<Escursione> q = em.createQuery("SELECT v from Escursione v WHERE v.luogo_fruizione ='"+citta+"' AND v.in_vendita = TRUE", Escursione.class);
    	
    	//Unisco insieme i risultati e li restituisco
    	List<Escursione> vList = q.getResultList();
    	List<AttivitaDTO> res = new LinkedList<AttivitaDTO>();
    	for(Escursione v : vList) {
    		res.add(Utils.convertToDTO(v));
    	}
    	return res;
    }
}
